package cn.tedu.toa.management.commons.vo;

import lombok.Data;
import lombok.experimental.Accessors;

/**
 * 用于封装返回的数据
 */
@Data
@Accessors(chain=true)// 链式set编程,是可以调用set方法 并返回当前类对象
public class Result <T>{
    private Integer state;//状态码
    private String message;//保存错误提示
    private T data;// T 某一个类型  data 表示返回得数据

    //成功时用于封装状态码值 -- 只是封装成功的状态码值,没有返回 data
    public static Result ok(){
        return new Result().setState(State.OK);
    }

    //封装data数据  T 存入static 静态
    public static<T> Result ok(T data){
        return new Result().setState(State.OK).setData(data);
    }

    //请求失败时 封装状态码和提示信息
    public static Result failure(Integer state,String message){
        return new Result().setState(state).setMessage(message);
    }

    //失败时封装状态码值和异常对象
    public static Result failure(Integer state,Throwable e){
        return new Result().setState(state).setMessage(e.getMessage());
    }


    public interface  State{
        Integer OK=2000;//成功的状态码
        Integer UNKNOWN_ERR=4000;//未知错误的状态码
        Integer RECORD_NOT_FOUND_ERR=4001;//记录查询错误的状态码
        Integer PARAM_ILLEFAL_ERR=4002;//参数违法状态
        Integer ILLEGAL_OPERATION_ERR=4003;//违法操作状态码
        Integer DELETE_ERR=4004;//删除状态码异常
        Integer PARENT_NODE_NOT_FOUND_ERR=4005;//父节点获取失败状态码
        Integer INSERT_ERR=4006;//添加失败状态异常状态码
        Integer UPDATE_ERR=4007;//修改失败状态异常状态码
        Integer USERNAME_IS_USED_ERR=4008; //用户名被占用状态码
        Integer ROLE_NOT_CHOOSED_ERR=4009;//用户没有选择角色状态码

        Integer UNKNOWN_ACCOUNT_ERR=4010;//用户不存在状态码
        Integer LOCKED_ACCOUNT_ERR=4011;//用户被禁用状态码
        Integer INCORRECT_CRRDENTIALS_ERR=4012;//用户密码错误状态码
        Integer AUTH_ORIZATION_ERR=4013;//用户没有权限状态码
    }
}
